﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using EvaluacionExalmarEntidades;
using EvaluacionExalmarLogicaNegocio;
using GlobalesUtilitarios;

namespace appEvaluacionExalmarMant
{
    // ReSharper disable InconsistentNaming
    public partial class frmJerarquia : Form
    // ReSharper restore InconsistentNaming
    {
        public EmpleadoInfo OEmpleado;

        public frmJerarquia()
        {
            InitializeComponent();
        }

        private void frmJerarquia_Load(object sender, EventArgs e)
        {
            gvEvaluados.AutoGenerateColumns = false;
            if (OEmpleado != null)
            {
                CargarEmpleado();
            }
            CargarTipoJerarquia();
            CargarEmpleadosJerarquia();
        }

        private void CargarEmpleado()
        {
            OEmpleado = new Empleado().Consultar(OEmpleado);
            if (OEmpleado != null)
            {
                txtIdEmpleado.Text = OEmpleado.IdEmpleado.ToString();
                txtEmpleado.Text = OEmpleado.NombreCompleto;
                txtCargo.Text = OEmpleado.Cargo.Descripcion;
                txtGerencia.Text = OEmpleado.Gerencia.Descripcion;
                txtArea.Text = OEmpleado.Area.Descripcion;
                txtEtapa.Text = OEmpleado.EtapaContribucion.ToString();

                CargarEvaluados();
            }
        }

        private void CargarEvaluados()
        {
            var oJerarquia = new JerarquiaInfo(OEmpleado.IdEmpleado, null, null);
            var oJefes = new Jerarquia().ListarJefes(oJerarquia);
            var oSubordinados = new Jerarquia().ListarSubordinados(oJerarquia);
            var oAutoevaluacion = new Jerarquia().ListarAutoevaluación(oJerarquia);

            var oEvaluados = new List<JerarquiaInfo>();

            for (var i = 0; i <= oJefes.Count - 1; i++)
            {
                oEvaluados.Add(oJefes[i]);
            }

            for (var i = 0; i <= oSubordinados.Count - 1; i++)
            {
                oEvaluados.Add(oSubordinados[i]);
            }

            for (var i = 0; i <= oAutoevaluacion.Count - 1; i++)
            {
                oEvaluados.Add(oAutoevaluacion[i]);
            }

            gvEvaluados.DataSource = oEvaluados;
            Generales.CellFormat(gvEvaluados);
            gvEvaluados.ClearSelection();
        }

        private void CargarEmpleadosJerarquia()
        {
            cboEmpleadoJerarquia.DataSource = new Empleado().Listar(null);
            cboEmpleadoJerarquia.ValueMember = "IdEmpleado";
            cboEmpleadoJerarquia.DisplayMember = "NombreCompleto";
        }

        private void CargarTipoJerarquia()
        {
            cboTipoJerarquia.DataSource = new TipoJerarquia().Listar(null);
            cboTipoJerarquia.ValueMember = "IdTipoJerarquia";
            cboTipoJerarquia.DisplayMember = "Descripcion";
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            var nTipoJerarquia = (int?)(cboTipoJerarquia.SelectedIndex == -1 ? null : cboTipoJerarquia.SelectedValue);
            var nEmpleadoJerarquia = (int?)(cboEmpleadoJerarquia.SelectedIndex == -1 ? null : cboEmpleadoJerarquia.SelectedValue);

            if (OEmpleado.IdEmpleado == nEmpleadoJerarquia && nTipoJerarquia != 3)
            {
                MessageBox.Show(@"Solo puede agregar al mismo empleado si selecciona el tipo de jerarquía 'Autoevaluación'", @"Evaluación de Personal", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            var oJerarquia = new JerarquiaInfo(OEmpleado.IdEmpleado, nTipoJerarquia, nEmpleadoJerarquia);

            if (new Jerarquia().Registrar(oJerarquia))
            {
                MessageBox.Show(@"Jerarquía agregada", @"Evaluación de Personal", MessageBoxButtons.OK, MessageBoxIcon.Information);
                CargarEvaluados();
            }
            else
            {
                MessageBox.Show(@"No se pudo registrar la jerarquía", @"Evaluación de Personal", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }

        private void btnQuitar_Click(object sender, EventArgs e)
        {
            var nFila = gvEvaluados.CurrentCell.RowIndex;

            if (nFila > -1)
            {
                var nTipoJerarquia = Int32.Parse(gvEvaluados.Rows[nFila].Cells[1].Value.ToString());
                var nEmpleadoJerarquia = Int32.Parse(gvEvaluados.Rows[nFila].Cells[0].Value.ToString());
                
                if (
                    MessageBox.Show(@"¿Está seguro de eliminar la jerarquía seleccionada?", @"Evaluación de Personal",
                                    MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    var oJerarquia = new JerarquiaInfo(OEmpleado.IdEmpleado, nTipoJerarquia, nEmpleadoJerarquia);

                    if (new Jerarquia().Eliminar(oJerarquia))
                    {
                        MessageBox.Show(@"Jerarquía eliminada", @"Evaluación de Personal", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        CargarEvaluados();
                    }
                    else
                    {
                        MessageBox.Show(@"No se pudo eliminar la jerarquía", @"Evaluación de Personal", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    }
                }
            }
        }
    }
}
